JDBC中Preparedstatement使用小结 及JDBC插入数据后获得Last insert ID

Categories: Java; Tagged with: ; @ February 19th, 2009 10:20

编写SQL语句, 尤其是要插入多个Filed时, 是一件非常BT的事情, 至少让我很不爽, 使用preparedstatement可以使代码变得更优雅一些, 虽然会有些长, 但会更条理, 而且preparedstatement更高于SQL语句 – 相对来说不太容易随着数据库版本改变而变动. 另外preparedstatement效率更高, 安全性更好

下面是恐怖的SQL:

			Statement statement = (Statement) conn.createStatement();
			String sql = "INSERT INTO `DEP`.`employee` " +
					"( `name` , `age` , `address` , `isMale` , `level` , `Department_ID` ) " +
					"VALUES (" +
					"'" + emp.getName() + "', " +
					emp.getAge()  + ", " +
					 JdbcUtilities.getSqlForString(emp.getAddress()) + ", " +
					emp.getIsMale() + ", "  +
					emp.getLevel() + ", " +
					emp.getDepartment_ID() + ");"
					;

			log.debug("Executing sql :" + sql);
			statement.executeUpdate(sql);

			ResultSet rs = statement.executeQuery("SELECT last_insert_id();");// .execute("SELECT last_insert_id();");
			if(rs.next()) {
				System.out.println(rs.getInt("1"));
			}

这里是使用PreparedStatement后的语句:

			String psql = "INSERT INTO Employee (name, age, address, isMale, level, Department_ID) VALUES (?, ?, ?, ?, ?, ?)";
			PreparedStatement ps  = conn.prepareStatement(psql,Statement.RETURN_GENERATED_KEYS);

			ps.setString(1, emp.getName());
			ps.setInt(2, emp.getAge());
			ps.setString(3, emp.getAddress());
			ps.setInt(4, emp.getIsMale());
			ps.setInt(5, emp.getLevel());
			ps.setInt(6, emp.getDepartment_ID());

			ps.executeUpdate();

			ResultSet keys = ps.getGeneratedKeys(); // equivalent to "SELECT last_insert_id();"

			if(keys.next()) {
				System.out.println(keys.getInt(1));
			}

PreparedStatement的使用步骤:

  1. 声明 PreparedStatement。

    PreparedStatement prepStmt;
  2. 将一条 SQL 语句指派给 PreparedStatement 对象。

    prepStmt = conn.prepareStatement(
       "INSERT INTO MyTable(MyColumn) values (?)");
  3. 为该语句指派输入参数值。

    以下代码显示一个字符串参数。

    String newValue;
    // assign value
    prepStmt.setStringParameter(1, newValue);
  4. 执行该语句。

    返回值表示受该语句影响的行数。

    long rowsInserted = prepStmt.executeStatement();
  5. 如果禁用了 [自动提交],请提交更改。

    conn.commit();

参考地址

获得组后插入的ID, 在上面代码中已经包括.

<->



// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.